図 1 フォワーダーにインターネットへの問合せを送る LAN 上の DNS サーバーから転送されて きた問合せをもとに、インターネット上の インターネット DNS サーバーに問い合わせる DNS サーバー LAN フォワーダー DNS サーバー 問合せを転送 DNS サーバー LAN 上のホストは、インターネット上の DNS サーバーとは直接通信しない インターネットにはフォワーダーだけを公開する ( LAN 内のほかの DNS サーバーを公開する必要がな く、安全性が高い ) 図 2 フォワーダーに LAN 内のほかのゾーンへの問合せを送る LA N フォワーダー DNS サーバー DNS サーバー 問合せを転送 転送されてきた問合せをゾーン B の DNS サーバーに送る ソーン B のスレーブサー / ヾーをゾーン A に置く代わりに、フォワーダーで問合せを転送することができる は、フォワーダーから応答がなかったときに未を もちます。 ・ only が指定されていると、フォワーダーから応答がなか った場合に何もしない。 ・ first が指定されている場合は、フォワーダーから応答が なければ LAN 上の DNS サーノヾー自身が名前解決を試 みる。 転送専用の言殳定 フォワード機能では、受け取った問合せをすべて転送す ることもできますし、一部の問合せは自分で解決し、 forward [ 〃 e ] ; forwarders { address ; addt 、 ess ; zone ステートメントに言当する場合は、以下に示すゾー ンの種類の指定も必要です。 type forward; は転送方式を意味し、 "only" または、、 first" を指 定します。 address にはフォワーダー ( フォワード先の DNS サーバー ) の IP アドレスを指定します。 LAN 上の DNS サーバーは、 DNS の問合せを祠市℃ ss で指定されたフォワーダーに転送し、フォワーダーから得 た芯答を問合せ元に返します。 68 UNIX MAGAZINE 2006. 1
連載 ネットワーク・ミニ実験室 荒井美千子 UNIX MAGAZINE 2006 . 1 に分かれた LAN でのゾーン情報の転送があります。 フォワーダーのもう 1 つの利用例として、複数のゾーン フォワーダーの利用例 ( その 2 ) キャッシュされるので、名前解決を効率的におこなえます。 ます。インターネット上のホストの情報がフォワーダーに 特別な設定をしなくてもキャッシュ・サーバーとして働き また、フォワーダーとして利用する DNS サーバーは、 がないぶん安全に運用できます。 ーだけでよく、 LAN 上の DNS サーバーは公開する必要 インターネットに公開する DNS サーバーはフォワーダ き、問合せを転送させる手法がよく使われます ( 図 1 ) 。 ァイアウォール上に DNS サーバー ( フォワーダー ) を置 直接問い合わせるのは望ましくありません。そのため、フ DNS サーバーが、インターネット上の DNS サーバーに 同じから、 LAN 上の個々の DNS クライアントや ォールを設け、直接通信しないようにするのが一般的です。 ネットのあいだにはセキュリティを守るためのファイアウ たとえば、 LAN (LocaI Area Network) とインター フォワーダーの利用例 ( その 1 ) ーバーのことをフォワーダーと呼びます。 合せ元に返す機能です。また、問合せを転送する DNS サ の問合せをほかの DNS サーバーに転送し、その応答を問 が、 DNS の世界におけるフォワードは、受け取った DNS 一般には、メールやバケットを転送する機能を指します ます。 れら以外にフォワード (forward) という大きな機能があり た DNS のさまざまな機能をみてきました。 DNS には、 前回までに、名前解決やゾーン転送、キャッシュといっ ロ NS フォワーダー ント、または zone ステートメントに追加してください。 の 2 行を、 named. C011f ファイルの options ステートメ DNS サーバーの named. conf ファイルに言当します。次 フォワードの設定は、フォワーダーに問合せを転送する フォワードの設定 こなえます。 間がかかる ) ゾーンのあいだでも、効率よく名前解決をお シュに保存されるので、ネットワーク的に遠い ( 通信に時 働きます。ゾーン B 上のホストの名前解灣青報がキャッ こでも、フォワーダーはキャッシュ・サーバーとして なりません。 DNS サーバーの情報をあらかじめ設定しておかなければ 切な DNS サーバーに送る必要があるので、ゾーン B の 当然ながら、フォワーダーは転送されてきた問合せを適 結果をゾーン A の DNS サーバーに返します。 合せをもとに、ゾーン B の DNS サーバーに間い合わせ、 ーダーはゾーン A の DNS サーバーから転送されてきた問 たとえは図 2 のようなネットワーク構成の場合、フォワ 問い合わせます。 にフォワーダー経由でゾーン情報をもつ DNS サーバーに DNS サーバーにコピーしておくのではなく、必要なとき フォワードを利用した方法では、ゾーン情報を複数の となっています。 たゾーン情報のコピーをもとに、問合せに応答する仕組み ープサーバーに転送します。スレープサーバーは、入手し ターサーバーが管理しているゾーン情報を、まるごとスレ などでゾーン転送を紹介しました。ゾーン転送では、マス ほかのゾーンの情報を得る方法として、 2005 年 10 月号 67
図 6 時刻に関する処理のデバック用のコード if (dbg-timenow) { ptime—free (timenow) ; timenow = dbg—timenow ; fprintf (stderr, "Debug: Running as if TimeNow is %s" ptimeget—ctime(dbg—timenow) ) ; 次に、指定されたオプションの妥当性の検証をおこない のため、 timenow 変数が TN = の右辺に書かれた時刻とな るように、 dbg-timenow 変数の値で置き換えています。 ます。 -R オプションが指定された場合、引数として指定さ また、このときに設定した時刻をメッセージとして出力 れたファイルのローテーションを実施します。つまり、 -R しています。 オプションが指定された場合には、ファイルも指定されて いる必要があります。 if (rotatereq) { argc) { if (optind warnx ( "At least one filename ・ when —R 疇 - must be given is specified. usage() ; / * NOTREACHED * / この確認は、引数が指定されていれば、 getopt 関数を終 了した段階で optind の値が argc よりも小さくなる点を 利用しています。この 2 つの値が等しけれは引数カ鮨定さ れていないことになるので、メッセージを出力して終了し ます。 -R オプションが指定された場合には、オプションへの 引数として指定された文字列をログファイルに書き出すメ ッセージのなかで利用します。この文字列のなかに印字で きない文字が含まれているとログファイルの閲覧の際に文 字化けを起こしたりするため、この段階でよけいな文字を ドット (. ) に置き換えています。 for (p = requestor; *p ! = if (!isprintch(*p) & & - ☆ 今回は、 newsyslog コマンドのソースコードのなかか ら、 main 関数とコマンド行オプションを解析する parse- args 関数を紹介しました。 プログラムの動作という意味では、まだとりあげていな い get-worklist や do-entry などの関数も重要です。 れらについても順番に紹介していく予定です。 ( たじみ・ひさかず ) 好評発売中 ! 。 = - プログラミング テクニック アドバンス 00 しし EC す一 ON プログラミング テクニック アドバンス 第区第 X フ 0 グラミング ース 0 ートに画な玉の手第 多治見寿和著 B5 判、 224 ページ ISBN 4-756 ト 4566 ー 3 ] , 890 円 ( 税込み ) 本誌に好評連載中の「プログラミング・テクニック」単行本 化第 2 弾 ( 2000 年 4 月号 ~ 2002 年 3 月号 ) 。 IJN Ⅸ上で実際 に使われているプログラムのソースコードを読みながら、 その成り立ちや数々の技術的工夫を学ぶことで、先人たち の経験に裏打ちされたプロク、ラミング手法が自然と身につ きます。実用的プログラミングを目指す方にお薦めの 1 冊。 マ目次から g 「 ep 、 flex 、 ps 、情報の収集、「 whOd 、「 up/ 「 use 「 s 、旧 v6 対応の te et 、 t 引 net の全体構造、リンクバッフア、非同期 入出力、シク、ナルの処理 株式会社アスキー 〒 1 02-8584 東京都千代田区九段北ト ] 3-5 日本地所第一ビル 営業局電話 (03) 6888-5500 http: 〃 www.ascii ℃ 0. jp/ なお、プログラムにはデバッグ用のコードがまだ残って います。たとえば、 dbg-timenow の値に依存して実行さ れる部分は、時刻の処理に関するデバッグのためのコード です ( 図 6 ) 。具体的には、 -D オプションへの引数として " という文字列が指定されている場合、指定され た時刻を現在時刻とみなしてプログラムを実行します。そ 66 UNIX MAGAZINE 2006 . 1